Hello world of deep learning (L9)
看投影片前面有介紹 Keras 可惜影片中沒看到…
Mini-batch
大概是延續未出現在影片中的內容…
關於 mini-batch 在 Deep and Structured - L2 Notes(下) 有。
這邊應該是在解釋它的程式碼。
我們並不會在每次更新時都去算所有 data 的 cost ,然後 minimize total loss ,我們可能會分成好幾部份去做更新。
以上圖為例:
每一個 batch 裡有 100 筆資料,然後有 n 組 batch 。
每算完一個 batch 就 update 一次參數。
所謂 1 epoch 就是指跑完 n 組 batch 後算一次(參數會更新 n 次)。
而這邊 20 epoch 就是要跑這 n 組 20 次 (更新 n x 20 次)。
- batch size = 1 ,就是每看 1 筆資料就更新 => Stochastic gradient descent
- batch size = B ,就是每看 B 筆資料就更新 => mini-batch
- batch size = 全部資料數 ,就是全看完才更新 => full-batch
Speed
size 也會影響其更新速度:
50000 examples:
- size = 1 ,1 epoch (50000 updates) ,=> 166s
- size = 10 ,1 epoch (5000 updates) ,=> 17s
可以看到 size 較大 1 epoch 完成的速度較快,但他們在同樣時間更新的次數是 差不多 的
( size = 10 ,10 epoch (50000 updates),=> 170s )
然而在更新方向上, size 大的會比較 穩定,所以在這邊選擇 size = 10 較好。
為什麼 batch 大會較快呢?
大致上是因為在做矩陣運算時,有各種加速,一筆一筆的算(vector) 反而不會比較快。
當然如果太大也可能產生不好的表現。(e.g. full-batch)
可能每走幾步就卡在 saddle point 或 local minimum 。
而在 mini-batch 中,因為它的隨機性讓它有機會跳出梯度為 0 的區域。
其他
實務上我們在做每個 epoch 時,可以隨機挑選不同的 batch 來加強訓練效果。
分析
這邊稍微講了一下對每個 neuron 做分析,看它區分了些甚麼。
以下圖為例,第一層可能可以區分在某些位置上如果有墨水,那它的 weight 就比較大,也就會有比較大的 output。
(其餘略過)